package modele.listener;

import java.util.ArrayList;

import javax.swing.event.EventListenerList;

/**
 * Cette classe simplifie le code pour le systeme Observer/Observable specifique a ce programme. Elle definit le comportement commun des objets observes.
 * Il suffit qu'un objet (ici trains ou portes ou leds ou manette) herite de cette classe (en specifiant le type de listener) et definisse fireModeleChanged() pour supporter le systeme.
 * 
 * @see modele.LED
 * @see modele.Manette
 * @see modele.Portes
 * @see modele.TrainAterrissage
 * @author Jo
 *
 * @param <T> Type de listener, contenant ainsi une methode specifique au listener.
 */
public abstract class ObservableGenerique <T> {
	protected ArrayList<T> listenersListe;
	
	public ObservableGenerique() {
		listenersListe = new ArrayList<T>();
	}
	
	public void addListener(T listener){
		listenersListe.add(listener);
	}
	
	public void removeListener(T l){
		 listenersListe.remove(l);
	}
	
	/**
	 * Notifie tous les listeners que l'etat de l'objet a change.
	 */
	public abstract void fireModeleChanged();
	
	
	
	
	
	
	/*private EventListenerList listeners;
	listeners = new EventListenerList();
	
	public void addVolumeListener(EtatTrainAterrissageListener listener){
		listeners.add(EtatTrainAterrissageListener.class, listener);
	}
		
	public void fireVolumeChanged(){
		EtatTrainAterrissageListener[] listenerList = (EtatTrainAterrissageListener[])listeners.getListeners(EtatTrainAterrissageListener.class);
 
		for(EtatTrainAterrissageListener listener : listenerList){
			listener.etatChanged(new EtatTrainAterrissageChangedEvent(this, getEtat()));
		}
	}*/
}
